アイデンティティの考察: 値オブジェクト
多くの場合、扱うデータオブジェクトにはアイデンティティ(e.g. ID)がなく交換可能 e.g. "W1234" という WidgetCode(装置コード)
code:fsharp
let widgetCode1 = WidgetCode "W1234"
let widgetCode2 = WidgetCode "W1234"
printfn "%b" (widgetCode1 = widgetCode2) // "true"
e.g. PersonalName(個人名)レコード型
code:fsharp
let name1 = {FirstName="Alex"; LastName="Adams"}
let name2 = {FirstName="Alex"; LastName="Adams"}
printfn "%b" (name1 = name2) // "true"
e.g. Address(住所)レコード型
code:fsharp
let address1 = {StreetAddress="123 Main St"; City="New York"; Zip="90001"}
let address2 = {StreetAddress="123 Main St"; City="New York"; Zip="90001"}
printfn "%b" (address1 = address2)
値オブジェクトかどうかの判断
「同じ 〜 を持っている」という言い回しをできるか
個人名
Chris has the same name as me.(クリスは私と同じ名前を持っている)
住所
Pat has the same postal address to me(パットは私と同じ住所を持っている)
F# の代数的な型システムを使ってドメインモデリングすると、作成した型はデフォルトでフィールドベースの等価性テストを実装する 同じ型に属する 2 つのレコード値は、フィールドがすべて等しい場合に等しい
同じ型に属する 2 つの選択値は、ケースが同じかつそのフィールドの値が等しい場合に等しい